package com.mazaiting.manager.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mazaiting.manager.config.mp.annos.DeptPermission;
import com.mazaiting.manager.domain.entity.SysUser;
import com.mazaiting.manager.domain.po.user.UserDetailPO;
import com.mazaiting.manager.domain.po.user.UserPO;
import com.mazaiting.manager.domain.query.UserPageQuery;
import com.mazaiting.manager.domain.vo.user.UserExportVO;
import com.mazaiting.manager.dto.UserAuthDTO;

import java.util.List;
import java.util.Optional;

/**
 * sys_user用户表 Mapper 接口
 *
 * @author 党海亮
 * @since 2022-03-22
 */
public interface ISysUserMapper extends BaseMapper<SysUser> {

//    /**
//     * 根据条件查询指定父ID下数据及 id = parentId 的数据
//     * -- ${ew.customSqlSegment} 没有条件的情况用这个, 已经有条件了使用${ew.sqlSegment}
//     *
//     * @param wrapper 查询条件
//     * @param parentId 父 ID
//     * @return 分页数据
//     */
//    List<SysUser> list(@Param(Constants.WRAPPER) Wrapper<SysUser> wrapper, Long parentId);

//    /**
//     * 分页根据条件查询指定父ID下数据及 id = parentId 的数据
//     * @param page 分页
//     * @param wrapper 查询条件
//     * @param parentId 父 ID
//     * @return 分页数据
//     */
//    IPage<SysUser> list(IPage<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> wrapper, Long parentId);

    /**
     * 根据用户名获取认证信息
     * @param username 用户名
     * @return 认证信息
     */
    Optional<UserAuthDTO> getAuthInfoByUsername(String username);

    /**
     * 分页查询
     * @param page 分页
     * @param queryParams 查询参数
     * @return 分页数据
     */
    @DeptPermission("sd")
    Page<UserPO> listUserPages(Page<UserPO> page, UserPageQuery queryParams);

    /**
     * 根据用户 ID 获取用户详情
     * @param userId 用户 ID
     * @return 用户详细信息
     */
    UserDetailPO getUserDetail(Long userId);

    /**
     * 根据查询条件查询数据并导出
     * @param queryParams 查询条件
     * @return 导出数据列表
     */
    @DeptPermission("sd")
    List<UserExportVO> listExportUsers(UserPageQuery queryParams);
}
